//package com.biShe.utils;
//
//import com.alibaba.fastjson.JSONObject;
//import com.jeeplus.common.utils.StringUtils;
//import com.jeeplus.config.properties.JeePlusProperites;
//import org.apache.http.HttpEntity;
//import org.apache.http.client.methods.CloseableHttpResponse;
//import org.apache.http.client.methods.HttpPost;
//import org.apache.http.conn.ssl.SSLConnectionSocketFactory;
//import org.apache.http.entity.StringEntity;
//import org.apache.http.impl.client.CloseableHttpClient;
//import org.apache.http.impl.client.HttpClients;
//import org.apache.http.ssl.SSLContexts;
//import org.apache.http.util.EntityUtils;
//import org.dom4j.Document;
//import org.dom4j.DocumentException;
//import org.dom4j.DocumentHelper;
//import org.dom4j.Element;
//import org.dom4j.io.SAXReader;
//import org.slf4j.Logger;
//import org.slf4j.LoggerFactory;
//
//import javax.net.ssl.SSLContext;
//import javax.servlet.ServletInputStream;
//import javax.servlet.http.HttpServletRequest;
//import java.io.*;
//import java.math.BigDecimal;
//import java.net.HttpURLConnection;
//import java.net.InetAddress;
//import java.net.URL;
//import java.security.KeyStore;
//import java.security.MessageDigest;
//import java.time.LocalDateTime;
//import java.time.format.DateTimeFormatter;
//import java.util.*;
//
//public class WxPayUtils {
//
//
//
//    private static Logger logger = LoggerFactory.getLogger(WxPayUtils.class);
//    /**
//     * 应用 id（用户端）
//     */
//    public static final String APP_ID_APP1 = " ";
//    public static final String APP_ID_SECRET1 = " ";
//    /**
//     * 应用 id（小程序）
//     */
//    public static final String APP_ID_APP2 = " ";
//    public static final String APP_ID_SECRET2 = " ";
//
//    /**
//     * 商户号 mch id
//     */
//    private static final String MCH_ID = "";
//
//    /**
//     * 密钥(key)
//     */
//    private static final String KEY = " ";
//
//
//    /**
//     * 异步回调通知地址
//     */
//    public static final String NOTIFY_URL2 ="/api/wxPayNotify1";
//
//    /**
//     * 交易类型
//     */
//    public static final String TRADE_TYPE_APP = "APP"; // app支付
//    public static final String TRADE_TYPE_JSAPI = "JSAPI";// JSAPI支付（或小程序支付）
//    public static final String TRADE_TYPE_MWEB = "MWEB";// H5支付
//    public static final String TRADE_TYPE_NATIVE = "NATIVE";// Native支付
//    /**
//     * 微信接口返回结果成功状态值(SUCCESS)
//     */
//    private static final String SUCCESS = "SUCCESS";
//
//    /**
//     * 微信接口返回结果失败状态值(FAIL)
//     */
//    private static final String FAIL = "FAIL";
//
//    /**
//     * 微信签名字段名(sign)
//     */
//    private static final String FIELD_SIGN = "sign";
//
//    /**
//     * 微信「统一下单」接口地址
//     */
//    private static final String UNIFIEDORDER_URL = "https://api.mch.weixin.qq.com/pay/unifiedorder";
//
//    /**
//     * 微信订单查询接口
//     */
//    private static final String ORDER_QUERY = "https://api.mch.weixin.qq.com/pay/orderquery";
//    /**
//     * 证书路径
//     */
//    private static final String CERTNAME = "/cert/apiclient_cert.p12";
//    /**
//     * 退款地址
//     */
//    private static final String REFUND_URL = "https://api.mch.weixin.qq.com/secapi/pay/refund";
//
//
//    public static final String getCode = "https://open.weixin.qq.com/connect/oauth2/authorize?appid=%s&redirect_uri=%s&response_type=code&scope=%s&state=STAT#wechat_redirect";
//    public static final String webAccessTokenhttps = "https://api.weixin.qq.com/sns/jscode2session?appid=%s&secret=%s&js_code=%s&grant_type=authorization_code";
//
//    /**
//     * 创建微信预支付订单
//     *
//     * @param body   商品描述
//     * @param out_trade_no   订单号
//     * @param price    价格 /元
//     * @param appid appid
//     * @param notifyUrl 回调地址
//     * @return
//     * @throws Exception
//     */
//    public static Map<String, String> createOrderApp(String body, String out_trade_no, String price, String appid,String notifyUrl) throws Exception {
//        String uuid = getUUID();
//        /**
//         * 生成微信「统一下单」请求数据
//         */
//        Map<String, String> dataMap = new HashMap<>();
//        dataMap.put("appid", appid);
//        dataMap.put("mch_id", MCH_ID);
//        dataMap.put("nonce_str", uuid);
//        dataMap.put("body", body);
//        dataMap.put("out_trade_no", out_trade_no);
//        dataMap.put("total_fee", new BigDecimal(price).multiply(new BigDecimal("100")).intValue() + "");
//        dataMap.put("spbill_create_ip", InetAddress.getLocalHost().getHostAddress());
//        dataMap.put("notify_url",  JeePlusProperites.newInstance().filePath+notifyUrl);
//        dataMap.put("trade_type", TRADE_TYPE_APP);
//        /**
//         * 生成签名(MD5 编码)
//         */
//        String md5Sign = getMD5Sign(dataMap, KEY, FIELD_SIGN);
//        dataMap.put("sign", md5Sign);
//
//        logger.debug("微信支付请求参数：" + dataMap.toString());
//        /**
//         * 发送请求数据
//         */
//        String respXml = requestWithoutCert(UNIFIEDORDER_URL, dataMap, 5000, 10000);
//        /**
//         * 解析微信返回数据
//         */
//        dataMap.clear();
//        dataMap = processResponseXml(respXml);
//        //dataMap.put("noncestr", uuid);
//        logger.debug("微信支付返回参数：" + dataMap.toString());
//        /**
//         * 没有生成预支付订单,直接返回
//         */
//        if (dataMap.get("prepay_id") == null) {
//            throw new RuntimeException(dataMap.get("return_msg") + ";" + dataMap.get("err_code_des"));
//        }
//        /**
//         * 生成微信APP支付「调起支付接口」的请求参数
//         */
//        Map<String, String> resultMap = getPayOrder(dataMap, KEY, FIELD_SIGN, TRADE_TYPE_APP);
//        /**
//         * 添加预支付订单创建成功标识
//         */
//        resultMap.put("pre_pay_order_status", "success");
//
//        /**
//         * 返回处理结果
//         */
//        return resultMap;
//    }
//
//
//    /**
//     * 创建微信预支付订单(公众号)
//     *
//     * @param openid   用户标识(trade_type=JSAPI时（即JSAPI支付），此参数必传)
//     * @param body   商品描述
//     * @param price    价格 /元
//     * @return
//     * @throws Exception
//     */
//
//    public static Map<String, String> createOrderGzh(String openid, String threadNo, String price) throws Exception {
//        String uuid = getUUID();
//        /**
//         * 生成微信「统一下单」请求数据
//         */
//        Map<String, String> dataMap = new HashMap<>();
//        dataMap.put("appid", APP_ID_APP2);
//        dataMap.put("mch_id", MCH_ID);
//        dataMap.put("nonce_str", uuid);
//        dataMap.put("body", "购买会员");
//
//        dataMap.put("out_trade_no", threadNo);
//        dataMap.put("total_fee", new BigDecimal(price).multiply(new BigDecimal("100")).intValue() + "");
//        dataMap.put("spbill_create_ip", InetAddress.getLocalHost().getHostAddress());
//        dataMap.put("notify_url", JeePlusProperites.newInstance().filePath+NOTIFY_URL2);
//        dataMap.put("trade_type", TRADE_TYPE_JSAPI);
//        dataMap.put("openid", openid);
//        /**
//         * 生成签名(MD5 编码)
//         */
//        String md5Sign = getMD5Sign(dataMap, KEY, FIELD_SIGN);
//        dataMap.put("sign", md5Sign);
//
//        logger.debug("微信支付请求参数：" + dataMap.toString());
//        /**
//         * 发送请求数据
//         */
//        String respXml = requestWithoutCert(UNIFIEDORDER_URL, dataMap, 5000, 10000);
//        /**
//         * 解析微信返回数据
//         */
//        dataMap.clear();
//        dataMap = processResponseXml(respXml);
//        //dataMap.put("noncestr", uuid);
//        logger.debug("微信支付返回参数：" + dataMap.toString());
//        /**
//         * 没有生成预支付订单,直接返回
//         */
//        if (dataMap.get("prepay_id") == null) {
//            throw new RuntimeException(dataMap.get("return_msg") + ";" + dataMap.get("err_code_des"));
//        }
//        /**
//         * 生成微信APP支付「调起支付接口」的请求参数
//         */
//        //Map<String, String> resultMap = getPayOrder(dataMap, KEY, FIELD_SIGN, TRADE_TYPE_JSAPI);
//        SortedMap<String, String> params = new TreeMap<String, String>();
//        params.put("appId", dataMap.get("appid"));
//        params.put("timeStamp", getTimeStampSecond()); //时间戳
//        params.put("nonceStr", dataMap.get("nonce_str")); //随机字符串
//        params.put("package", "prepay_id=" + dataMap.get("prepay_id")); //主意格式必须为 prepay_id=***
//        params.put("signType", "MD5"); //签名的方式必须是MD5
//        params.put("paySign", getMD5Sign(params, KEY, FIELD_SIGN));
//
//
//        /**
//         * 添加预支付订单创建成功标识
//         */
//        params.put("pre_pay_order_status", "success");
//
//        /**
//         * 返回处理结果
//         */
//        return params;
//    }
//
//
//    /** 微信退款
//     * @param out_trade_no 商户这边的订单号
//     * @param transaction_id 微信那边的交易单号
//     * @param totalFee 订单的金额 单位为分
//     * @param refundFee 要退的金额 单位为分
//     */
//    @SuppressWarnings("deprecation")
//    public static JSONObject refundApp(String out_trade_no, String transaction_id, String totalFee, String refundFee) {
//        try{
//            KeyStore keyStore = KeyStore.getInstance("PKCS12");
//            FileInputStream instream = new FileInputStream(CERTNAME);
//            try {
//                keyStore.load(instream, MCH_ID.toCharArray());
//            }finally {
//                instream.close();
//            }
//            SSLContext sslcontext = SSLContexts.custom().loadKeyMaterial(keyStore, MCH_ID.toCharArray()).build();
//            SSLConnectionSocketFactory sslsf = new SSLConnectionSocketFactory(
//                    sslcontext, new String[] { "TLSv1" }, null,
//                    SSLConnectionSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER);
//            CloseableHttpClient httpclient = HttpClients.custom().setSSLSocketFactory(sslsf).build();
//            HttpPost httppost = new HttpPost(REFUND_URL);
//
//            String nonceStr = getUUID();
//
//            SortedMap<String,String> parameters = new TreeMap<String,String>();
//            parameters.put("appid", APP_ID_APP1);
//            parameters.put("mch_id", MCH_ID);
//            parameters.put("nonce_str", nonceStr);
//            parameters.put("out_trade_no", out_trade_no);
//            if (StringUtils.isNotBlank(transaction_id)) {
//                parameters.put("transaction_id", transaction_id);
//            }
//            parameters.put("out_refund_no", nonceStr);
//            parameters.put("fee_type", "CNY");
//            parameters.put("total_fee", totalFee);
//            parameters.put("refund_fee", refundFee);
//            parameters.put("op_user_id", MCH_ID);
//            String sign = getMD5Sign(parameters, KEY, FIELD_SIGN);
//            parameters.put("sign", sign);
//            String xml = map2Xml(parameters);
//            logger.debug("微信退款请求XML：" + xml);
//            try {
//                StringEntity se = new StringEntity(xml);
//                httppost.setEntity(se);
//                CloseableHttpResponse responseEntry = httpclient.execute(httppost);
//                try {
//                    HttpEntity entity = responseEntry.getEntity();
//                    if (entity != null) {
//                        SAXReader saxReader = new SAXReader();
//                        Document document = saxReader.read(entity.getContent());
//                        Element rootElt = document.getRootElement();
//                        logger.debug(rootElt.asXML());
//                        String resultCode = rootElt.elementText("result_code");
//                        JSONObject result = new JSONObject();
//                        if("SUCCESS".equals(resultCode)){
//                            result.put("weixinPayUrl", rootElt.elementText("code_url"));
//                            result.put("prepayId", rootElt.elementText("prepay_id"));
//                            result.put("status","success");
//                            result.put("msg","success");
//                        }else{
//                            result.put("status","false");
//                            result.put("msg",rootElt.elementText("err_code_des"));
//                        }
//                        logger.debug("微信退款result:" + result.toString());
//                        return result;
//                    }
//                    EntityUtils.consume(entity);
//                }
//                finally {
//                    responseEntry.close();
//                }
//            }
//            finally {
//                httpclient.close();
//            }
//            return null;
//        }catch(Exception e){
//            e.printStackTrace();
//            logger.error("微信退款失败：" + e.getMessage());
//            JSONObject result = new JSONObject();
//            result.put("status","error");
//            result.put("msg",e.getMessage());
//            return result;
//        }
//    }
//    /** 微信退款
//     * @param out_trade_no 商户这边的订单号
//     * @param transaction_id 微信那边的交易单号
//     * @param totalFee 订单的金额 单位为分
//     * @param refundFee 要退的金额 单位为分
//     */
//    @SuppressWarnings("deprecation")
//    public static JSONObject refundGzh(String out_trade_no, String transaction_id, String totalFee, String refundFee, String appid) {
//        try{
//            KeyStore keyStore = KeyStore.getInstance("PKCS12");
//            FileInputStream instream = new FileInputStream(CERTNAME);
//            try {
//                keyStore.load(instream, MCH_ID.toCharArray());
//            }finally {
//                instream.close();
//            }
//            SSLContext sslcontext = SSLContexts.custom().loadKeyMaterial(keyStore, MCH_ID.toCharArray()).build();
//            SSLConnectionSocketFactory sslsf = new SSLConnectionSocketFactory(
//                    sslcontext, new String[] { "TLSv1" }, null,
//                    SSLConnectionSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER);
//            CloseableHttpClient httpclient = HttpClients.custom().setSSLSocketFactory(sslsf).build();
//            HttpPost httppost = new HttpPost(REFUND_URL);
//
//            String nonceStr = getUUID();
//
//            SortedMap<String,String> parameters = new TreeMap<String,String>();
//            parameters.put("appid", appid);
//            parameters.put("mch_id", MCH_ID);
//            parameters.put("nonce_str", nonceStr);
//            parameters.put("out_trade_no", out_trade_no);
//            if (StringUtils.isNotBlank(transaction_id)) {
//                parameters.put("transaction_id", transaction_id);
//            }
//            parameters.put("out_refund_no", nonceStr);
//            parameters.put("fee_type", "CNY");
//            parameters.put("total_fee", totalFee);
//            parameters.put("refund_fee", refundFee);
//            parameters.put("op_user_id", MCH_ID);
//            String sign = getMD5Sign(parameters, KEY, FIELD_SIGN);
//            parameters.put("sign", sign);
//            String xml = map2Xml(parameters);
//            logger.debug("微信退款请求XML：" + xml);
//            try {
//                StringEntity se = new StringEntity(xml);
//                httppost.setEntity(se);
//                CloseableHttpResponse responseEntry = httpclient.execute(httppost);
//                try {
//                    HttpEntity entity = responseEntry.getEntity();
//                    if (entity != null) {
//                        SAXReader saxReader = new SAXReader();
//                        Document document = saxReader.read(entity.getContent());
//                        Element rootElt = document.getRootElement();
//                        logger.debug(rootElt.asXML());
//                        String resultCode = rootElt.elementText("result_code");
//                        JSONObject result = new JSONObject();
//                        if("SUCCESS".equals(resultCode)){
//                            result.put("weixinPayUrl", rootElt.elementText("code_url"));
//                            result.put("prepayId", rootElt.elementText("prepay_id"));
//                            result.put("status","success");
//                            result.put("msg","success");
//                        }else{
//                            result.put("status","false");
//                            result.put("msg",rootElt.elementText("err_code_des"));
//                        }
//                        logger.debug("微信退款result:" + result.toString());
//                        return result;
//                    }
//                    EntityUtils.consume(entity);
//                }
//                finally {
//                    responseEntry.close();
//                }
//            }
//            finally {
//                httpclient.close();
//            }
//            return null;
//        }catch(Exception e){
//            e.printStackTrace();
//            logger.error("微信退款失败：" + e.getMessage());
//            JSONObject result = new JSONObject();
//            result.put("status","error");
//            result.put("msg",e.getMessage());
//            return result;
//        }
//    }
//    /**
//     * 查询支付结果/订单状态
//     *
//     * @param orderNo
//     * @return
//     * @throws Exception
//     */
//    public static Map<String, String> getPayResult(String orderNo, String appid) throws Exception {
//
//        /**
//         * 生成微信「订单状态查询」请求数据
//         */
//        Map<String, String> dataMap = new HashMap<>();
//        dataMap.put("appid", appid);
//        dataMap.put("mch_id", MCH_ID);
//        dataMap.put("out_trade_no", orderNo);
//        dataMap.put("nonce_str", getUUID());
//        /**
//         * 生成签名 MD5 编码
//         */
//        String md5Sign = getMD5Sign(dataMap, KEY, FIELD_SIGN);
//        dataMap.put("sign", md5Sign);
//
//        /**
//         * 发送请求数据
//         */
//        String resXml = requestWithoutCert(ORDER_QUERY, dataMap, 5000, 10000);
//        /**
//         * 解析请求数据
//         */
//        dataMap.clear();
//        dataMap = processResponseXml(resXml);
//
//        /**
//         * 返回处理结果
//         */
//        return dataMap;
//    }
//
//    public static Map<String, String> getReceiveMap(HttpServletRequest request) {
//        try {
//            ServletInputStream inputStream = request.getInputStream();
//            String stringFromStream = getStringFromStream(inputStream);
//            Map<String, String> processResponseXml = processResponseXml(stringFromStream);
//            return processResponseXml;
//        } catch (Exception e) {
//            throw new RuntimeException("处理微信异步通知数据失败:" + e.getMessage());
//        }
//
//    }
//
//    /**
//     * 处理 HTTPS API返回数据，转换成Map对象。return_code为SUCCESS时，验证签名。
//     *
//     */
//    private static Map<String, String> processResponseXml(String xmlStr) throws Exception {
//        String RETURN_CODE = "return_code";
//        String return_code;
//        Map<String, String> respData = xml2Map(xmlStr);
//        if (respData.containsKey(RETURN_CODE)) {
//            return_code = respData.get(RETURN_CODE);
//        } else {
//            throw new Exception(String.format("No `return_code` in XML: %s", xmlStr));
//        }
//
//        if (return_code.equals(FAIL)) {
//            return respData;
//        } else if (return_code.equals(SUCCESS)) {
//            /**
//             * 签名校验
//             */
//            if (signValidate(respData, KEY, FIELD_SIGN)) {
//                return respData;
//            } else {
//                throw new Exception(String.format("Invalid sign value in XML: %s", xmlStr));
//            }
//        } else {
//            throw new Exception(String.format("return_code value %s is invalid in XML: %s", return_code, xmlStr));
//        }
//    }
//
//    /**
//     * 生成微信支付「调起支付接口」请求参数
//     *
//     * @param data
//     *            源数据
//     * @param key
//     *            签名密钥
//     * @param fieldSign
//     *            签名字段名(固定值 sign)
//     * @return
//     * @throws Exception
//     */
//    private static Map<String, String> getPayOrder(Map<String, String> data, String key, String fieldSign, String tradeType)	throws Exception {
//        Map<String, String> resultMap = new HashMap<>();
//        resultMap.put("appid", data.get("appid"));
//        resultMap.put("partnerid", data.get("mch_id"));
//        resultMap.put("prepayid", data.get("prepay_id"));
//        resultMap.put("package", TRADE_TYPE_APP.equals(tradeType) ? "Sign=WXPay" : "prepay_id=" + data.get("prepay_id"));
//        resultMap.put("noncestr", data.get("nonce_str"));
//        resultMap.put("timestamp", getTimeStampSecond());
//        //resultMap.put("mweburl", data.get("mweb_url"));
//        //resultMap.put("codeurl", data.get("code_url"));
//        //resultMap.put("signType", "MD5");
//        /**
//         * 生成签名
//         */
//        String sign = getMD5Sign(resultMap, key, fieldSign);
//        resultMap.put("sign", sign);
//
//        return resultMap;
//    }
//
//    /**
//     * 获取支付订单号
//     *
//     *            微信支付配置信息
//     * @param orderNo
//     *            外部订单号
//     * @return 微信支付流水号
//     * @throws Exception
//     */
//    public static String getPayNo(String orderNo) throws Exception {
//        Map<String, String> resultMap = getPayResult(orderNo,APP_ID_APP1);
//        if (resultMap.isEmpty()) {
//            return null;
//        }
//        if (SUCCESS.equalsIgnoreCase(resultMap.get("trade_state"))) {
//            return resultMap.get("transaction_id");
//        }
//        return null;
//    }
//
//    /**
//     * 生成UUID字符串
//     *
//     * @return string UUID
//     */
//    private static String getUUID() {
//        return UUID.randomUUID().toString().replaceAll("-", "");
//    }
//
//    /**
//     * 生成 md5 签名.将 map 数据按照 key 的升序进行排列 使用URL键值对的格式(即key1=value1&key2=value2…)
//     * 传送的sign参数不参与签名
//     *
//     * @param data
//     *            待签名数据
//     * @param key
//     *            密钥
//     * @param fieldSign
//     *            签名字段(sign)
//     * @return 签名
//     */
//    private static String getMD5Sign(final Map<String, String> data, String key, String fieldSign) {
//        Set<String> keySet = data.keySet();
//        String[] keyArray = keySet.toArray(new String[keySet.size()]);
//        Arrays.sort(keyArray);
//        StringBuilder sb = new StringBuilder();
//        for (String k : keyArray) {
//            if (k.equals(fieldSign)) {
//                continue;
//            }
//            if (data.get(k) != null && data.get(k).trim().length() > 0) // 参数值为空，则不参与签名
//                sb.append(k).append("=").append(data.get(k).trim()).append("&");
//        }
//        sb.append("key=").append(key);
//        return md5(sb.toString()).toUpperCase();
//    }
//
//    /**
//     * 校验签名
//     *
//     * @param data
//     *            待校验数据
//     * @param key
//     *            密钥
//     * @param fieldSign
//     *            签名字段(sign)
//     * @return
//     */
//    private static boolean signValidate(Map<String, String> data, String key, String fieldSign) {
//        if (!data.containsKey(fieldSign)) {
//            return false;
//        }
//        String sign = data.get(fieldSign);
//        return getMD5Sign(data, key, fieldSign).equalsIgnoreCase(sign);
//    }
//
//    /**
//     * 普通 md5 编码
//     *
//     * @param url
//     * @return
//     */
//    private static String md5(String url) {
//        try {
//            MessageDigest md5 = MessageDigest.getInstance("MD5");
//            md5.update(url.getBytes("UTF-8"));
//            byte messageDigest[] = md5.digest();
//
//            StringBuffer hexString = new StringBuffer();
//            for (int i = 0; i < messageDigest.length; i++) {
//                String t = Integer.toHexString(0xFF & messageDigest[i]);
//                if (t.length() == 1) {
//                    hexString.append("0" + t);
//                } else {
//                    hexString.append(t);
//                }
//            }
//            return hexString.toString();
//        } catch (Exception e) {
//            e.printStackTrace();
//        }
//        return null;
//    }
//
//    /**
//     * 从输入流中读取字符数据
//     *
//     * @param inputStream
//     *            servlet request inputStream
//     * @return
//     * @throws IOException
//     */
//    private static String getStringFromStream(InputStream inputStream) throws IOException {
//        if (inputStream == null) {
//            return null;
//        }
//        StringBuffer sb = new StringBuffer();
//        String s;
//        BufferedReader in = new BufferedReader(new InputStreamReader(inputStream, "UTF-8"));
//        while ((s = in.readLine()) != null) {
//            sb.append(s);
//        }
//        in.close();
//        inputStream.close();
//
//        return sb.toString();
//    }
//
//    /**
//     * 将 xml 转换为 map
//     *
//     * @param xmlStr
//     *            xml 格式字符串
//     * @return map 对象
//     * @throws DocumentException
//     */
//    @SuppressWarnings("rawtypes")
//    private static Map<String, String> xml2Map(String xmlStr) throws DocumentException {
//        Map<String, String> map = new HashMap<String, String>();
//        Document doc = DocumentHelper.parseText(xmlStr);
//
//        if (doc == null)
//            return map;
//        Element root = doc.getRootElement();
//        for (Iterator iterator = root.elementIterator(); iterator.hasNext();) {
//            Element e = (Element) iterator.next();
//            map.put(e.getName(), e.getText());
//        }
//        return map;
//    }
//
//    /**
//     * map 转 xml (仅微信支付xml格式)
//     *
//     * @param dataMap
//     *            map 数据
//     * @return
//     */
//    public static String map2Xml(Map<String, String> dataMap) {
//        StringBuffer sb = new StringBuffer();
//        sb.append("<xml>");
//        for (String key : dataMap.keySet()) {
//            String value = "<![CDATA[" + dataMap.get(key) + "]]>";
//            sb.append("<" + key + ">" + value + "</" + key + ">");
//        }
//        sb.append("</xml>");
//
//        return sb.toString();
//    }
//
//    /**
//     * 获取当前时间戳(秒级,10位数字)
//     *
//     * @return 时间戳
//     */
//    private static String getTimeStampSecond() {
//        return Math.round(new Date().getTime() / 1000) + "";
//    }
//
//    /**
//     * 不需要证书的请求
//     *
//     * @param strUrl
//     *            String
//     * @param reqData
//     *            向wxpay post的请求数据
//     * @param connectTimeoutMs
//     *            超时时间，单位是毫秒
//     * @param readTimeoutMs
//     *            超时时间，单位是毫秒
//     * @return API返回数据
//     * @throws Exception
//     */
//    private static String requestWithoutCert(String strUrl, Map<String, String> reqData, int connectTimeoutMs, int readTimeoutMs) throws Exception {
//        String UTF8 = "UTF-8";
//        String reqBody = map2Xml(reqData);
//        URL httpUrl = new URL(strUrl);
//        HttpURLConnection httpURLConnection = (HttpURLConnection) httpUrl.openConnection();
//        httpURLConnection.setDoOutput(true);
//        httpURLConnection.setRequestMethod("POST");
//        httpURLConnection.setConnectTimeout(connectTimeoutMs);
//        httpURLConnection.setReadTimeout(readTimeoutMs);
//        httpURLConnection.connect();
//        OutputStream outputStream = httpURLConnection.getOutputStream();
//        outputStream.write(reqBody.getBytes(UTF8));
//
//        // 获取内容
//        InputStream inputStream = httpURLConnection.getInputStream();
//        BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputStream, UTF8));
//        final StringBuffer stringBuffer = new StringBuffer();
//        String line = null;
//        while ((line = bufferedReader.readLine()) != null) {
//            stringBuffer.append(line).append("\n");
//        }
//        String resp = stringBuffer.toString();
//        if (stringBuffer != null) {
//            try {
//                bufferedReader.close();
//            } catch (IOException e) {
//                e.printStackTrace();
//            }
//        }
//        if (inputStream != null) {
//            try {
//                inputStream.close();
//            } catch (IOException e) {
//                e.printStackTrace();
//            }
//        }
//        if (outputStream != null) {
//            try {
//                outputStream.close();
//            } catch (IOException e) {
//                e.printStackTrace();
//            }
//        }
//
//        return resp;
//    }
//
//}